<?php
namespace Game\Controller;
use Common\Controller\CommonController;
use Game\Org\GameConfig;
use Game\Org\Tables;
/**
 * du 2025.2.7
 * 游戏模块通用继承控制器
 */
class GameBaseController extends CommonController{
    /*
     * du 2025.2.14
     * 初始化函数
     * Summary of _initialize
     * 主要用于校验token
     * 同时获得uid
     * 
     */
    public function _initialize(){
        parent::_initialize();
        // 操作间隔时间 1秒
        if(!$_POST['token']){
            _apiReturn(0, 'token不能为空');
            return;
        }
        $token = $_POST['token'];
        $payload_json = base64_decode(explode('.',$token)[0]);
        $payload = json_decode(($payload_json), true);
        $uid = $payload['uid'];
        if(!$uid){
            _apiReturn(0, 'token无效');
            return;
        }
        $role = $payload['role'];
        if(!$role){
            _apiReturn(0, 'token无效');
            return;
        }
        $sign = base64_decode(explode('.',$token)[1]);
        // USER 用户操作间隔时间 1秒
        if($role == 'USER'){
            if(C('IS_REQUEST_GAP_TIME')){
                if(S($uid)){
                    _apiReturn(0, '操作过于频繁');
                    return;
                }
                // 刷新操作时间
                S($uid, true, C('REQUEST_GAP_TIME'));
            }
        }
        $secret_key = C('TOKEN_SECRET_KEY');
        // 计算正确的token
        $check_token = hash_hmac('sha256', $payload_json, $secret_key);
        // 校验token是否正确
        if($sign != $check_token){
            _apiReturn(0, 'token无效');
            return;
        }
        // 保存uid
        $this->_uid = $uid;
        $this->_role = $role;
        // $this->_user = D('GameUser')->_get_game_user_info($uid);
        // 去除POST中的token
        unset($_POST['token']);

    }

    /**
     * du 2025.2.14
     * 获取完整用户信息
     * 比在MODEL中获取的信息增加一些等级计算等
     * 还有排序
     * Summary of _get_full_user_info
     * @return mixed
     */
    public function _get_full_user_info(){
        $res = D('GameUser', 'Service')->get_full_user_info($this->_uid);
        if($res['status']){
            return $res['data'];
        }
    }
    
    /**
     * du 2025.2.14
     * 设置用户背包里的东西
     * 可增加可减少
     * Summary of _add_user_backpack
     * @param mixed $item_list
     * [[item_id, quantity]，[]]
     * @return void
     */
    public function _set_user_backpack($item_list){
        $user = D('GameUser')->_get_game_user_info($this->_uid);
        foreach($item_list as $item){
            $item_id = $item[0];
            $quantity = $item[1];
            if($user['backpack'][$item_id] + $quantity < 0){
                _apiReturn(0, '兑换失败', $item_id);
                return;
            }
            if($user['backpack'][$item_id]){
                $user['backpack'][$item_id] += $quantity;
            }
            else{
                $user['backpack'][$item_id] = $quantity;
            }
        }
        $post['backpack'] = $user['backpack'];
        $post['id'] = $this->_uid;
        $res = D('GameUser')->_edit_game_user_info($post);
        return $res;
    }

    /**
     * du 2025.2.14
     * 读取配置表
     * Summary of _get_level_by_exp
     * loader方法：_read_json_file 写在Game/Common/function.php中
     * @param mixed $exp
     * @return mixed
     * 
     */
    public function _get_game_config() {
        $config = new GameConfig(_read_json_file);
        return $config;
    }
    
    /**
     * du 2025.2.14
     * 读取配置表
     * Summary of _get_level_by_exp
     * loader方法：_read_json_file 写在Game/Common/function.php中
     * @param mixed $exp
     * @return mixed
     * 
     */
    public function _get_config_table() {
        $config = new Tables(_read_json_file);
        return $config;
    }

    public $_currency_map = [
        'coin' => [
            'id' => '10001',
            'name' => 'R币'
        ],
        'diamond' => [
            'id' => '10002',
            'name' => '钻石'
        ]
    ];

    

}